package site.shihuan.helpdesk.ticket.dao;

import org.springframework.stereotype.Repository;
import site.shihuan.helpdesk.ticket.model.po.TktTicketPO;
import site.shihuan.helpdesk.ticket.model.vo.TicketVO;

import java.util.List;

/**
 * 工单(TktTicket)表数据库访问层
 *
 * @author 周世焕
 * @since 2021-04-04 14:37:25
 */
@Repository
public interface TktTicketDao {

    /**
     * 通过主键查询单条数据
     *
     * @param ticketId
     * @return 影响行数
     */
    TktTicketPO selectByPrimaryKey(String ticketId);

    /**
     * 新增数据
     *
     * @param tktTicket 实例对象
     * @return 影响行数
     */
    int insert(TktTicketPO tktTicket);

    /**
     * 新增数据（可选字段）
     *
     * @param tktTicket 实例对象
     * @return 影响行数
     */
    int insertSelective(TktTicketPO tktTicket);

    /**
     * 修改数据
     *
     * @param tktTicket 实例对象
     * @return 影响行数
     */
    int updateByPrimaryKey(TktTicketPO tktTicket);

    /**
     * 修改数据(可选字段)
     *
     * @param tktTicket 实例对象
     * @return 影响行数
     */
    int updateByPrimaryKeySelective(TktTicketPO tktTicket);

    /**
     * 通过主键删除数据
     *
     * @param ticketId
     * @return 影响行数
     */
    int deleteByPrimaryKey(String ticketId);

    /**
     * 查询TicketVOById
     * @param ticketId
     * @return
     */
    TicketVO selectById(String ticketId);

    /**
     * 查询租户的所有工单
     * @param tenantId
     * @return
     */
    List<TicketVO> selectAll(String tenantId);

    /**
     * 查询组内工单
     * @param tenantId
     * @param deptId
     * @return
     */
    List<TicketVO> selectByDeptAssigned(String tenantId, String deptId);

    /**
     * 查询我的工单
     * @param tenantId
     * @param userId
     * @param status
     * @return
     */
    List<TicketVO> selectByUserAssigned(String tenantId, String userId, String status);

    /**
     * 查询客户的工单
     * @param tenantId
     * @param customerId
     * @param status
     * @return
     */
    List<TicketVO> selectByCustomer(String tenantId, String customerId, String status);

    /**
     * 更新最终解决方案
     * @param tenantId
     * @param ticketId
     * @param finalReply
     * @return
     */
    int updateFinalReply(String tenantId, String ticketId, String finalReply);
}
